home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 38
/
Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso
/
-screenplay-
/
hd_installers
/
turrican2hd
/
src
/
readturr2disk.asm
< prev
next >
Wrap
Assembly Source File
|
1999-02-08
|
1KB
|
55 lines
; Turrican 2 disk image reader
include diskreader.asm
; tracks 0-1: dos tracks (5632 bytes each)
WRITEDOS #0
WRITEDOS #1
; tracks 2-159:
; - $9521 MFM sync
; - unused byte (encoded as 2 bytes MFM)
; - 6800 bytes of data (stored as 1700 8-byte MFM encoded longwords)
; - longword checksum as XOR of all preceding raw MFM data (encoded as MFM long)
moveq #2,d7 ; d7 = tracknumber
.nxttrk RAWREAD d7 ; read track
RESYNC #$9521 ; resync track
lea TRACKBUFFER,a0 ; beginning of buffer
lea 4(a0),a1 ; beginning of data in buffer
move.w #(6800/4)-1,d0
moveq #0,d3 ; accumulated checksum
move.l #$55555555,d4 ; 0101010101010...
.decode movem.l (a1)+,d1/d2 ; read 8-byte MFM encoded long
eor.l d1,d3 ; checksum raw MFM data
eor.l d2,d3
and.l d4,d1 ; decode MFM long
and.l d4,d2
add.l d1,d1
or.l d2,d1
move.l d1,(a0)+ ; write long
dbra d0,.decode
movem.l (a1)+,d1/d2 ; get stored checksum
and.l d4,d1 ; decode
and.l d4,d2
add.l d1,d1
or.l d2,d1
cmp.l d1,d3 ; verify checksum
beq.s .ok
FAILURE cksum(pc)
.ok WRITE #6800
addq.w #1,d7
cmp.w #160,d7
bne.s .nxttrk
rts
cksum dc.b 'bad checksum',0
MAKEBUF TRACKBUFFER